export default {
	app: function (options) {
		// nhjs环境下才执行
		if (this.isAndroid) {
			// 固定不变
			var method = "send";
			// 成功回调
			window.callback = function (res) {
				//返回扫码的结果 json格式：{"result":"扫码结果值"}
				options.callback && options.callback(arguments[0], arguments[1], arguments[3]);
			};

			// 参数
			var params = {
				"action": options.action,
				"callback": 'callback' //这里的值，必须与上方定义的对象一致，用于回调传值
			};
			// 由于params参数多变，这里进行深拷贝合并，灵活增加参数
			var data = options.data || {};
			params = extend(data, params);

			window.nh.invokeMethod(
				method, [JSON.stringify(params)]
			);
		} else if (this.isIOS) {
			//ios容器
			setupWebViewJavascriptBridge(function (bridge) {
				console.log("****setupWebViewJavascriptBridge");
				var data = {
					action: options.action,
					data: options.data
				}

				bridge.callHandler('send', data, function responseCallback(responseData) {
					console.log("JS received response:", responseData)
					options.callback && options.callback(arguments[0], arguments[1], arguments[3]);
				})
			});

		} else {
			// 否则友好提示
			// console.error("******亲爱的开发者你好，非nhjs容器环境下无法调用[" + params.action + "]组件API,请检查运行环境...****");
			// console.error("************新希望（newhope）欢迎你的加入！************");
		}
	},
	isAndroid: function () {
		var u = navigator.userAgent;
		var android = u.match(/(Android);?[\s/]+([\d.]+)?/);
		return android;
	},
	isIOS: function () {
		var u = navigator.userAgent;
		var iOS = u.match(/(iPhone\sOS)\s([\d_]+)/) || u.match(/(iPad).*OS\s([\d_]+)/); //ios苹果
		return iOS;
	}

}

/**
 * extend 合并多个对象，可以递归合并
 * @param {type} deep 是否递归合并
 * @param {type} target 最终返回的就是target
 * @param {type} source 从左到又，优先级依次提高，最右侧的是最后覆盖的
 * @returns {Object} 最终的合并对象
 */

function extend(target) {
	var finalTarget = target;

	for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
		rest[_key - 1] = arguments[_key];
	}

	rest.forEach(function (source) {
		source && Object.keys(source).forEach(function (key) {
			finalTarget[key] = source[key];
		});
	});

	return finalTarget;
}

window.setupWebViewJavascriptBridge = function (callback) {
	console.log("setupWebViewJavascriptBridge");
	if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }
	if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
	window.WVJBCallbacks = [callback];
	var WVJBIframe = document.createElement('iframe');
	WVJBIframe.style.display = 'none';
	WVJBIframe.src = 'https://__bridge_loaded__';
	document.documentElement.appendChild(WVJBIframe);
	setTimeout(function () { document.documentElement.removeChild(WVJBIframe) }, 0)
}

